/*************************************************************************
	> File Name: hollow.c
	> Author: Angel Criss
	> Mail: abbytsing@gmail.com 
	> Created Time: Sat, Jul 12, 2014  3:47:56 PM
 ************************************************************************/
/*
 * 创建文件空洞
 * 奇怪的是: 在Windows 和 OS X 上文件空洞会占用实际空间
 * 而在Linux上却不占用
 * 判断方法(blocks * blockszie<< filesize) 块个数*块大小 远远小于 文件大小
 * 则该文件包含空洞
 *
 * 还没写能够复制空洞的程序( linux copy 就会复制文件空洞 )
 *
 */

#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>

void err(char *func)
{
    perror(func);
    exit(errno);
}

int main(int argc,char *argv[])
{
    int fd;
    int num;
    char buf1[]="start";
    char buf2[]="end";

    if(argc!=3||strcmp(argv[1],"--help")==0)
    {
	    printf("%s filename number(filesize)\n",argv[0]);
	    exit(0);
    }

    num=atoi(argv[2]);


    if((fd=open(argv[1],O_CREAT|O_RDWR,00644))==-1)
        err("open");

    if(lseek(fd,0,SEEK_SET)==-1)
        err("lseek-1");


    if(write(fd,buf1,5)==-1)
        err("write");

    if(lseek(fd,num,SEEK_SET)==-1)  //pointer move to argv[2] length from file start
        err("lseek");

    if(write(fd,buf2,3)==-1)
        err("write");

    if(close(fd)==-1)
        err("close");
}
